package com.sunlgggg.util;


import org.apache.log4j.Logger;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;

/**
 * Created by sunlggggg on 2016/11/27.
 */
public class HttpRequestUtils {

    static Logger logger = Logger.getLogger(HttpRequestUtils.class);

    public static String get(String url) {

        url = "http://localhost:8080/java_sims/" + url;

        logger.info("url = " + url );

        String result = "";
        BufferedReader in = null;
        String urlNameString = url;
        URL realUrl;
        URLConnection connection;
        try {
            realUrl = new URL(urlNameString);
            connection = realUrl.openConnection();
            connection.connect();
            in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (in != null)
                    in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    public static String post(String url, String param) {

        url = "http://localhost:8080/java_sims/" + url;

        logger.info("url = " + url );

        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            URLConnection conn = realUrl.openConnection();
            // 发送POST请求必须设置如下两行


//           setDoOutput(true);以后就可以使用conn.getOutputStream().write()
//           setDoInput(true);以后就可以使用conn.getInputStream().read();
//
//            get请求用不到conn.getOutputStream()，因为参数直接追加在地址后面，因此默认是false。
//            post请求（比如：文件上传）需要往服务区传输大量的数据，这些数据是放在http的body里面的，因此需要在建立连接以后，往服务端写数据。
//            因为总是使用conn.getInputStream()获取服务端的响应，因此默认值是true。

            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            // 发送请求参数
            out.print(param);
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送 POST 请求出现异常！" + e);
            e.printStackTrace();
        }
        //使用finally块来关闭输出流、输入流
        finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return result;
    }

    public static void main(String[] args) {
        System.out.println(HttpRequestUtils.post("http://localhost:8080/EventAnalysisSystem/webAttack/webattackinfocount.do", "start=2016-08-18 16:43:55&end=2016-08-22 20:43:55"));
    }
}